package com.fiberhome.nas.feature.main.model

import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.flow.asSharedFlow
import javax.inject.Inject
import javax.inject.Singleton


/**
 * 单例类，用于管理共享状态。
 */
@Singleton
class SharedStateContainer @Inject constructor() {
    // 私有的可变共享流，用于发射编辑模式切换的状态。只有该类内部可以修改此状态。
    private val _switchEditMode = MutableSharedFlow<Boolean>()

    // 公开的只读共享流，外部组件可以通过订阅此流来观察编辑模式的切换状态。
    // 使用 asSharedFlow() 方法将可变流转换为只读流，确保外部无法修改状态。
    val switchEditMode: SharedFlow<Boolean> = _switchEditMode.asSharedFlow()

    /**
     * 用于切换编辑模式的挂起函数。
     * 调用此函数会发射一个新的编辑模式状态到共享流中，通知所有订阅者编辑模式已切换。
     *
     * @param edit 新的编辑模式状态，true 表示进入编辑模式，false 表示退出编辑模式。
     */
    suspend fun switchEditMode(edit: Boolean) {
        // 发射新的编辑模式状态到共享流中
        _switchEditMode.emit(edit)
    }
}
